Next: File Name Completion, Previous: File Name Expansion, Up: File Names [Contents][Index]
Some programs need to write temporary files. Here is the usual way to construct a name for such a file:
(make-temp-file name-of-application)
The job of make-temp-file is to prevent two
different users or two different jobs from trying to use the
exact same file name.
This function creates a temporary file and returns its
name. Emacs creates the temporary file’s name by adding
to prefix some random characters that are
different in each Emacs job. The result is guaranteed to be a
newly created empty file. On MS-DOS, this function can
truncate the string prefix to fit into the 8+3
file-name limits. If prefix is a relative file
name, it is expanded against
temporary-file-directory.
(make-temp-file "foo")
⇒ "/tmp/foo232J6v"
When make-temp-file returns, the file has
been created and is empty. At that point, you should write
the intended contents into the file.
If dir-flag is non-nil,
make-temp-file creates an empty directory
instead of an empty file. It returns the file name, not the
directory name, of that directory. See Directory
Names.
If suffix is non-nil,
make-temp-file adds it at the end of the file
name.
To prevent conflicts among different libraries running in
the same Emacs, each Lisp program that uses
make-temp-file should have its own
prefix. The number added to the end of
prefix distinguishes between the same application
running in different Emacs jobs. Additional added characters
permit a large number of distinct names even in one Emacs
job.
The default directory for temporary files is controlled by the
variable temporary-file-directory. This variable
gives the user a uniform way to specify the directory for all
temporary files. Some programs use
small-temporary-file-directory instead, if that is
non-nil. To use it, you should expand the prefix
against the proper directory before calling
make-temp-file.
This variable specifies the directory name for creating
temporary files. Its value should be a directory name (see
Directory
Names), but it is good for Lisp programs to cope if the
value is a directory’s file name instead. Using the
value as the second argument to expand-file-name
is a good way to achieve that.
The default value is determined in a reasonable way for
your operating system; it is based on the
TMPDIR, TMP and TEMP
environment variables, with a fall-back to a system-dependent
name if none of these variables is defined.
Even if you do not use make-temp-file to
create the temporary file, you should still use this variable
to decide which directory to put the file in. However, if you
expect the file to be small, you should use
small-temporary-file-directory first if that is
non-nil.
This variable specifies the directory name for creating certain temporary files, which are likely to be small.
If you want to write a temporary file which is likely to be small, you should compute the directory like this:
(make-temp-file
(expand-file-name prefix
(or small-temporary-file-directory
temporary-file-directory)))
This function generates a string that can be used as a
unique file name. The name starts with base-name,
and has several random characters appended to it, which are
different in each Emacs job. It is like
make-temp-file except that (i) it just
constructs a name, and does not create a file, and (ii)
base-name should be an absolute file name (on
MS-DOS, this function can truncate base-name to
fit into the 8+3 file-name limits).
Warning: In most cases, you should not
use this function; use make-temp-file instead!
This function is susceptible to a race condition, between the
make-temp-name call and the creation of the
file, which in some cases may cause a security hole.
Next: File Name Completion, Previous: File Name Expansion, Up: File Names [Contents][Index]